home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / os2 / adaptor.zip / ADAPT.ZIP / adaptor / examples / overlap / jacobi.f < prev   
Text File  |  1993-06-28  |  2KB  |  68 lines

  1.       PROGRAM LAPLACE
  2.       REAL F(:,:), DF(:,:), HF(:,:[1:1])
  3.       INTEGER MAXX, MAXY
  4.       REAL FMAX
  5.       INTEGER ITER
  6. c     read in sizes 
  7. c
  8.       PRINT *,'MAXX = (z.B. 64) '
  9.       READ *,MAXX
  10.       PRINT *,'MAXY = (z.B. 64) '
  11.       READ *,MAXY
  12.       ALLOCATE (F(MAXX,MAXY), DF(MAXX,MAXY))
  13.       ALLOCATE (HF(MAXX,MAXY))
  14. C
  15. !HPF$ INDEPENDENT, LOCAL_ACCESS
  16.       do j = 1, maxy
  17. !HPF$    INDEPENDENT, LOCAL_ACCESS
  18.          do i = 1, maxx 
  19.            if (j == maxy) then
  20.               F(i,j) = 1.0
  21.            else if (j == 1) then
  22.               F(i,j) = 2.0
  23.            else if ((i==1) .or. (i==maxx)) then
  24.               F(i,j) = 2.0
  25.            else
  26.               F(i,j) = 0.0
  27.            end if
  28.          end do
  29.       end do
  30.  
  31.       ITER = 0
  32.       FMAX = 1
  33.       DF = 0
  34.       DO WHILE (FMAX .gt. 0.001)
  35.          ITER = ITER + 1
  36. c        print *, 'iter = ', iter
  37. c        do i = 1, maxx
  38. c           do j = 1, maxy
  39. c              print *, 'f(',i,',',j,') = ',f(i,j)
  40. c           end do
  41. c        end do
  42.          hf = f          ! communicate with overlap
  43. c        do i = 1, maxx
  44. c           do j = 1, maxy
  45. c              print *, 'hf(',i,',',j,') = ', hf(i,j)
  46. c           end do
  47. c        end do
  48.          forall (j=2:maxy-1,i=2:maxx-1)
  49.              df(i,j) = (hf(i,j-1) + hf(i,j+1) + 
  50.      $                  hf(i-1,j) + hf(i+1,j) ) * 0.25  - hf(i,j)
  51.          end forall
  52. !HPF$    INDEPENDENT, LOCAL_ACCESS
  53.          do j = 2, maxy-1
  54. !HPF$      INDEPENDENT, LOCAL_ACCESS
  55.            do i = 2, maxx-1 
  56.              f(i,j) = f(i,j) + df(i,j)
  57.            end do
  58.          end do
  59.          DF = ABS(DF)
  60.          FMAX = MAXVAL (DF)
  61.          PRINT *,'Iteration ',ITER,'  Max = ',FMAX
  62.       END DO
  63.       PRINT *, ITER, ' Iterationen benoetigt'
  64.       deallocate (hf, df, f)
  65.       END 
  66.  
  67.